﻿// Gateway.Api 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
// 
// 本项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
// 
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动！任何基于本项目二次开发而产生的一切法律纠纷和责任，我们不承担任何责任！

using Aurora.AI.Domain.Domain;
using Aurora.AI.Gateway.Models.ChatLogger;
using Aurora.AI.SqlSugar.Framework.Repositories;
using Mapster;
using SqlSugar;

namespace Aurora.AI.Gateway.Services;

/// <summary>
/// 日志
/// </summary>
/// <param name="repository"></param>
public class ChatLoggerService(IRepository<ChatLogger> repository)
{
    public async Task<(int total, List<ChatLoggerPageListResponse> list)> GetPageListAsync(
        ChatLoggerPageListRequest request)
    {
        RefAsync<int> total = 0;
        var list = await repository.GetDb().Queryable<ChatLogger>()
            .WhereIF(request.StartTime != null, x => x.CreationTime >= request.StartTime)
            .WhereIF(request.EndTime != null, x => x.CreationTime <= request.EndTime)
            .WhereIF(!string.IsNullOrEmpty(request.UserId), x => x.UserId == request.UserId)
            .WhereIF(request.Type != null && request.Type != 0, x => x.Type == request.Type)
            .WhereIF(!string.IsNullOrEmpty(request.ModelName), x => x.ModelName == request.ModelName)
            .OrderByDescending(x => x.CreationTime)
            .ToOffsetPageAsync(request.Page, request.PageSize, total);

        List<ChatLoggerPageListResponse> results = list.Adapt<List<ChatLoggerPageListResponse>>();

        foreach (var item in results)
        {
            item.Quota = item.Quota / (decimal)500000;
        }

        return (total, results);
    }


    public async Task Create(ChatLogger logger)
    {
        await repository.InsertAsync(logger);
    }
}